package org.aileen.blog.utils;

import org.springframework.util.DigestUtils;

import java.io.UnsupportedEncodingException;
import java.util.UUID;

public class SecurityUtils {

    /**
     * 加密
     * @throws UnsupportedEncodingException
     */
    public static String encrypt(String password) throws UnsupportedEncodingException {
        //生成随机盐值然后将盐值中的-符号去掉
        String salt = UUID.randomUUID().toString().replace("-", "");
        //先用md5加密密码变成密文 md5加密这里我们采用盐值+明文的形式
        String secretString = DigestUtils.md5DigestAsHex((salt + password).getBytes("UTF-8"));

        //将盐值和密文拼接在一起进行二次加密并存储在数据库中
        return salt + secretString;
    }

    /**
     * 解密
     * 根据之前的加密生成的密文进行密码的验证
     */
    public static Boolean verify(String password , String finalPassword) throws UnsupportedEncodingException {

        //先验证前端用户输入的密码加密后的长度及是否有值
        if(finalPassword == null || finalPassword.length() != 64){
            return false; // 密文长度不正确或为空
        }
        //从数据库中的密文中获取盐值
        String salt = finalPassword.substring(0, 32); // 前32位是盐值
        //第一次加密:使用盐值和用户输入的密码进行加密获取密文
        String secretString = DigestUtils.md5DigestAsHex((salt + password).getBytes("UTF-8"));
        //第二次加密:将盐值和第一次加密的密文拼接在一起(salt + secretString)->存储在数据库
        String verifyPassword = salt + secretString;
        //将第二次加密后的密文和数据库中的密文进行比较,相同说明用户输入的密码正确
        return verifyPassword.equals(finalPassword);

    }
}
